﻿//using System;
//using System.Text;
//using System.Collections.Generic;
//using System.Linq;
//using Microsoft.VisualStudio.TestTools.UnitTesting;
//using System.IO;
//using MVCScaffold.GeradorCodigo;
//using MVCScaffold.Suporte;

//namespace MVCScaffold.Tests
//{
//    [TestClass]
//    public class Gerenciador_Templates
//    {
//        [ClassInitialize()]
//        public static void Preparar(TestContext testContext)
//        {
//            using (FileStream fileStream = File.Create(Path.Combine(testContext.TestDeploymentDir, "arquivo.csproj")))
//            {
//                var arquivo = MVCScaffold.Tests.Properties.Resources.arquivo_csproj;
//                fileStream.Write(arquivo, 0, arquivo.Length);
//            }

//            using (FileStream fileStream = File.Create(Path.Combine(testContext.TestDeploymentDir, "arquivo.Designer.cs")))
//            {
//                var arquivo = MVCScaffold.Tests.Properties.Resources.arquivo_designer_cs;
//                fileStream.Write(arquivo, 0, arquivo.Length);
//            }

//            using (FileStream fileStream = File.Create(Path.Combine(testContext.TestDeploymentDir, "arquivo.edmx")))
//            {
//                var arquivo = MVCScaffold.Tests.Properties.Resources.arquivo_edmx;
//                fileStream.Write(arquivo, 0, arquivo.Length);
//            }

//            CriarArquivosTemplate(testContext);
//            diretorioDeploy = testContext.TestDeploymentDir;
            
//            //Criar instancia de mensagens
//            MVCScaffold.Suporte.Mensagens.GetInstance("MVCScaffold.dll");
//        }

//        private static void CriarArquivosTemplate(TestContext testContext)
//        {
//            using (FileStream fileStream = File.Create(Path.Combine(testContext.TestDeploymentDir, "Create.aspx")))
//            {
//                var arquivo = MVCScaffold.Tests.Properties.Resources.Create_aspx;
//                fileStream.Write(arquivo, 0, arquivo.Length);
//            }

//            using (FileStream fileStream = File.Create(Path.Combine(testContext.TestDeploymentDir, "Delete.aspx")))
//            {
//                var arquivo = MVCScaffold.Tests.Properties.Resources.Delete_aspx;
//                fileStream.Write(arquivo, 0, arquivo.Length);
//            }

//            using (FileStream fileStream = File.Create(Path.Combine(testContext.TestDeploymentDir, "Details.aspx")))
//            {
//                var arquivo = MVCScaffold.Tests.Properties.Resources.Details_aspx;
//                fileStream.Write(arquivo, 0, arquivo.Length);
//            }

//            using (FileStream fileStream = File.Create(Path.Combine(testContext.TestDeploymentDir, "Edit.aspx")))
//            {
//                var arquivo = MVCScaffold.Tests.Properties.Resources.Edit_aspx;
//                fileStream.Write(arquivo, 0, arquivo.Length);
//            }

//            using (FileStream fileStream = File.Create(Path.Combine(testContext.TestDeploymentDir, "Index.aspx")))
//            {
//                var arquivo = MVCScaffold.Tests.Properties.Resources.Index_aspx;
//                fileStream.Write(arquivo, 0, arquivo.Length);
//            }

//            using (FileStream fileStream = File.Create(Path.Combine(testContext.TestDeploymentDir, "templateController.cs")))
//            {
//                var arquivo = MVCScaffold.Tests.Properties.Resources.templateController_cs;
//                fileStream.Write(arquivo, 0, arquivo.Length);
//            }
//        }

//        GerenciadorArquivoProjeto gerenciadorProjeto = new GerenciadorArquivoProjeto("arquivo.csproj");
//        GerenciadorEDMX gerenciadorEDMX = new GerenciadorEDMX("arquivo.edmx");
//        private static string diretorioDeploy;

//        [TestMethod]
//        public void Quando_Controllers_Gerado_Com_Sucesso()
//        {
//            //Arrange
//            var gerenciadorTemplate = new GeradorCodigoCSharp(gerenciadorEDMX,gerenciadorProjeto);

//            //Act 
//            gerenciadorTemplate.GerarControllers();

//            //Assert
//            Assert.AreEqual(11, gerenciadorTemplate.QuantidadeControllers);
//        }

//        [TestMethod]
//        public void Quando_Template_Controller_Nao_For_Encontrado()
//        {
//            //Arrange
//            var gerenciadorTemplate = new GeradorCodigoCSharp(gerenciadorEDMX, gerenciadorProjeto, diretorioDeploy);
//            File.Delete(Path.Combine(diretorioDeploy, "templateController.cs"));

//            //Act 
//            gerenciadorTemplate.GerarControllers();

//            //Assert
//            Assert.AreEqual(11, gerenciadorTemplate.QuantidadeControllers);
//        }

//        [TestMethod]
//        public void Carregar_Template_Controller()
//        {
//            //Arrange
//            var gerenciadorTemplate = new GeradorCodigoCSharp(gerenciadorEDMX, gerenciadorProjeto);

//            //Act 
//            var resultado = gerenciadorTemplate.CarregarTemplate(Templates.ControllerCSharp);

//            //Assert
//            Assert.IsNotNull(resultado);
//            Assert.IsFalse(String.IsNullOrEmpty(resultado));
//        }

//        [TestMethod]
//        public void Quando_Todas_Views_Geradas_Com_Sucesso()
//        {
//            //Arrange
//            var gerenciadorTemplate = new GeradorCodigoCSharp(gerenciadorEDMX, gerenciadorProjeto);

//            //Act 
//            gerenciadorTemplate.GerarViews();
            
//            //Assert
//            foreach (var item in gerenciadorEDMX.Entidades)
//            {
//                Assert.IsTrue(File.Exists(String.Format(@"Views\{0}\Create.aspx",item.Nome)));
//                Assert.IsTrue(File.Exists(String.Format(@"Views\{0}\Delete.aspx", item.Nome)));
//                Assert.IsTrue(File.Exists(String.Format(@"Views\{0}\Details.aspx", item.Nome)));
//                Assert.IsTrue(File.Exists(String.Format(@"Views\{0}\Edit.aspx", item.Nome)));
//                Assert.IsTrue(File.Exists(String.Format(@"Views\{0}\Index.aspx", item.Nome)));
//            }
//        }

//        [TestMethod]
//        public void Quando_Template_Da_View_Create_Nao_For_Encontrado()
//        {
//            //Arrange
//            var gerenciadorTemplate = new GeradorCodigoCSharp(gerenciadorEDMX, gerenciadorProjeto, diretorioDeploy);
//            File.Delete(Path.Combine(diretorioDeploy, "Create.aspx"));

//            //Act 
//            gerenciadorTemplate.GerarViews();

//            //Assert
//            foreach (var item in gerenciadorEDMX.Entidades)
//            {
//                Assert.IsTrue(File.Exists(String.Format(@"Views\{0}\Create.aspx", item.Nome)));
//                Assert.IsTrue(File.Exists(String.Format(@"Views\{0}\Delete.aspx", item.Nome)));
//                Assert.IsTrue(File.Exists(String.Format(@"Views\{0}\Details.aspx", item.Nome)));
//                Assert.IsTrue(File.Exists(String.Format(@"Views\{0}\Edit.aspx", item.Nome)));
//                Assert.IsTrue(File.Exists(String.Format(@"Views\{0}\Index.aspx", item.Nome)));
//            }
//        }

//        [TestMethod]
//        public void Quando_Template_Da_View_Delete_Nao_For_Encontrado()
//        {
//            //Arrange
//            var gerenciadorTemplate = new GeradorCodigoCSharp(gerenciadorEDMX, gerenciadorProjeto, diretorioDeploy);
//            File.Delete(Path.Combine(diretorioDeploy, "Delete.aspx"));

//            //Act 
//            gerenciadorTemplate.GerarViews();

//            //Assert
//            foreach (var item in gerenciadorEDMX.Entidades)
//            {
//                Assert.IsTrue(File.Exists(String.Format(@"Views\{0}\Create.aspx", item.Nome)));
//                Assert.IsTrue(File.Exists(String.Format(@"Views\{0}\Delete.aspx", item.Nome)));
//                Assert.IsTrue(File.Exists(String.Format(@"Views\{0}\Details.aspx", item.Nome)));
//                Assert.IsTrue(File.Exists(String.Format(@"Views\{0}\Edit.aspx", item.Nome)));
//                Assert.IsTrue(File.Exists(String.Format(@"Views\{0}\Index.aspx", item.Nome)));
//            }
//        }

//        [TestMethod]
//        public void Quando_Template_Da_View_Details_Nao_For_Encontrado()
//        {
//            //Arrange
//            var gerenciadorTemplate = new GeradorCodigoCSharp(gerenciadorEDMX, gerenciadorProjeto, diretorioDeploy);
//            File.Delete(Path.Combine(diretorioDeploy, "Details.aspx"));

//            //Act 
//            gerenciadorTemplate.GerarViews();

//            //Assert
//            foreach (var item in gerenciadorEDMX.Entidades)
//            {
//                Assert.IsTrue(File.Exists(String.Format(@"Views\{0}\Create.aspx", item.Nome)));
//                Assert.IsTrue(File.Exists(String.Format(@"Views\{0}\Delete.aspx", item.Nome)));
//                Assert.IsTrue(File.Exists(String.Format(@"Views\{0}\Details.aspx", item.Nome)));
//                Assert.IsTrue(File.Exists(String.Format(@"Views\{0}\Edit.aspx", item.Nome)));
//                Assert.IsTrue(File.Exists(String.Format(@"Views\{0}\Index.aspx", item.Nome)));
//            }
//        }

//        [TestMethod]
//        public void Quando_Template_Da_View_Edit_Nao_For_Encontrado()
//        {
//            //Arrange
//            var gerenciadorTemplate = new GeradorCodigoCSharp(gerenciadorEDMX, gerenciadorProjeto, diretorioDeploy);
//            File.Delete(Path.Combine(diretorioDeploy, "Edit.aspx"));

//            //Act 
//            gerenciadorTemplate.GerarViews();

//            //Assert
//            foreach (var item in gerenciadorEDMX.Entidades)
//            {
//                Assert.IsTrue(File.Exists(String.Format(@"Views\{0}\Create.aspx", item.Nome)));
//                Assert.IsTrue(File.Exists(String.Format(@"Views\{0}\Delete.aspx", item.Nome)));
//                Assert.IsTrue(File.Exists(String.Format(@"Views\{0}\Details.aspx", item.Nome)));
//                Assert.IsTrue(File.Exists(String.Format(@"Views\{0}\Edit.aspx", item.Nome)));
//                Assert.IsTrue(File.Exists(String.Format(@"Views\{0}\Index.aspx", item.Nome)));
//            }
//        }

//        [TestMethod]
//        public void Quando_Template_Da_View_Index_Nao_For_Encontrado()
//        {
//            //Arrange
//            var gerenciadorTemplate = new GeradorCodigoCSharp(gerenciadorEDMX, gerenciadorProjeto, diretorioDeploy);
//            File.Delete(Path.Combine(diretorioDeploy, "Index.aspx"));

//            //Act 
//            gerenciadorTemplate.GerarViews();

//            //Assert
//            foreach (var item in gerenciadorEDMX.Entidades)
//            {
//                Assert.IsTrue(File.Exists(String.Format(@"Views\{0}\Create.aspx", item.Nome)));
//                Assert.IsTrue(File.Exists(String.Format(@"Views\{0}\Delete.aspx", item.Nome)));
//                Assert.IsTrue(File.Exists(String.Format(@"Views\{0}\Details.aspx", item.Nome)));
//                Assert.IsTrue(File.Exists(String.Format(@"Views\{0}\Edit.aspx", item.Nome)));
//                Assert.IsTrue(File.Exists(String.Format(@"Views\{0}\Index.aspx", item.Nome)));
//            }
//        }
//    }
//}
